package com.ym.core.utils.qiniu;

import lombok.Data;
import org.apache.commons.lang3.StringUtils;

/**
 * 七牛云上传策略
 * <p>
 * 魔法变量支持$(<Object>.<Property>)形式的访问子项，例如：
 * <p>
 * $(\<var>)
 * $(\<var>.\<field_name>)
 * $(\<var>.\<field_name>.\<sub_field_name>)
 * 求值举例：
 * <p>
 * $(bucket) - 获得上传目标bucket名字
 * $(imageInfo) - 获取当前上传图片的基本属性信息
 * $(imageInfo.height) - 获取当前上传图片的原始高度
 * 魔法变量不支持数组形式的访问子项，例如：
 * <p>
 * $(\<var>[0])
 * $(\<var>.\<field_name>[0])
 *
 * @author: 李涛
 * @version: 2019年08月02日 11:28
 */
@Data
public abstract class UpPutPolicy {

	/**
	 * 获得上传的目标空间名。
	 */
	private String bucket = "$(bucket)";

	/**
	 * 获得文件保存在空间中的资源名
	 */
	private String key = "$(key)";

	/**
	 * 文件上传成功后的 HTTPETag。若上传时未指定资源ID，Etag将作为资源ID使用。
	 */
	private String etag = "$(etag)";

	/**
	 * 上传的原始文件名。
	 */
	private String fname = "$(fname)";

	/**
	 * 资源尺寸，单位为字节。
	 */
	private String fsize = "$(fszie)";

	/**
	 * 资源类型，例如JPG图片的资源类型为image/jpg。
	 */
	private String mimeType = "$(mimeType)";

	/**
	 * 上传时指定的endUser字段，通常用于区分不同终端用户的请求。
	 */
	private String endUser = "$(endUser)";

	/**
	 * 音视频转码持久化的进度查询ID。
	 */
	private String persistentId = "$(persistentId)";

	/**
	 * 获取上传图片的Exif信息。
	 * 该变量包含子字段，例如对$(exif.ApertureValue.val)取值将得到该图片拍摄时的光圈值。
	 * <p>
	 * {
	 * "DateTime" : {
	 * "type" : 2,
	 * "val" : "2011:11:19 17:09:23"
	 * },
	 * "ExposureBiasValue" : {
	 * "type" : 10,
	 * "val" : "0.33 EV"
	 * },
	 * "ExposureTime" : {
	 * "type" : 5,
	 * "val" : "1/50 sec."
	 * },
	 * "Model" : {
	 * "type" : 2,
	 * "val" : "Canon EOS 600D"
	 * },
	 * "ISOSpeedRatings" : {
	 * "type" : 3,
	 * "val" : "3200"
	 * },
	 * "ResolutionUnit" : {
	 * "type" : 3,
	 * "val" : " 英寸"
	 * },
	 * ...后续内容已省略...
	 * }
	 * <p>
	 * 保护子项：是
	 */
	//private String exif = "$(exif)";

	/**
	 * 获取所上传图片的基本信息。
	 * 该变量包含子字段，例如对$(imageInfo.width)取值将得到该图片的宽度。
	 * {
	 * "format":       "jpeg",
	 * "width":        640,
	 * "height":       427,
	 * "colorModel":   "ycbcr"
	 * }
	 * <p>
	 * 保护子项：是
	 */
	//private String imageInfo = "$(imageInfo)";
	/**
	 * 图片宽度
	 */
	private String imageInfoWidth = "$(imageInfo.width)";

	/**
	 * 图片高度
	 */
	private String imageInfoHeight = "$(imageInfo.height)";

	/**
	 * 视频高度
	 */
	private String videoHeight = "$(avinfo.video.height)";

	/**
	 * 视频宽度
	 */
	private String videoWidth = "$(avinfo.video.width)";

	/**
	 * 时长
	 */
	private String duration = "$(avinfo.format.duration)";

	/**
	 * 音视频资源大小
	 */
	private String size = "$(avinfo.format.size)";

	/**
	 * 上传资源的后缀名，通过自动检测的 mimeType 或者$(fname)的后缀来获取。
	 */
	private String ext = "$(model)";

	/**
	 * 生成uuid
	 */
	private String uuid = "$(uuid)";

	public String getWidth() {
		if (StringUtils.isNotBlank(this.imageInfoWidth) && !"null".equals(this.imageInfoWidth)) {
			return this.imageInfoWidth;
		} else if (StringUtils.isNotBlank(this.videoWidth) && !"null".equals(this.videoWidth)) {
			return this.videoWidth;
		}
		return null;
	}

	public String getHeight() {
		if (StringUtils.isNotBlank(this.imageInfoHeight) && !"null".equals(this.imageInfoHeight)) {
			return this.imageInfoHeight;
		} else if (StringUtils.isNotBlank(this.videoHeight) && !"null".equals(this.videoHeight)) {
			return this.videoHeight;
		}
		return null;
	}
}
